package com.starview.platform.data;

/**
 * Visitor interface for {@link IValue}s. Part of a visitor pattern.
 * 
 * Implementing an {@link IValueVisitor} will allow traversal of an {@link IValue} for such purposes
 * as serialization and pretty printing.
 * 
 * @author fgm
 * 
 */
public interface IValueVisitor
{
  void visitScalar(IScalar<?> scalar);

  void visitRecord(IRecord agg);

  void visitArray(IArray array);

  void visitRelation(IRelation relation);

  void visitFunction(IFunction fn);

  void visitPattern(IPattern ptn);

  void visitConstructor(IConstructor con);

  void visitMap(IMap map);
}
